package com.starblink.android.basic.ext

import com.starblink.android.basic.user.UserDataCenter
import com.starblink.rocketreserver.FetchAccountInfoQuery
import com.starblink.rocketreserver.fragment.AccountF
import com.starblink.rocketreserver.type.LoginChannel

object ApolloModelExt {
    /**
     * 是否可以查看用户发布内容
     */
    fun AccountF.isPostOpen(): Boolean {
        return getPrivacyItemStatus(1)
    }

    /**
     * 是否可以查看用户点赞内容
     */
    fun AccountF.isLikeOpen(): Boolean {
        return getPrivacyItemStatus(2)
    }

    /**
     * 是否可以查看用户Wishlist
     */
    fun AccountF.isWishlistOpen(): Boolean {
        return getPrivacyItemStatus(3)
    }

    /**
     * 是否可以查看用户粉丝信息
     */
    fun AccountF.isFansOpen(): Boolean {
        return getPrivacyItemStatus(4)
    }

    /**
     * 是否可以查看用户关注信息
     */
    fun AccountF.isFollowOpen(): Boolean {
        return getPrivacyItemStatus(5)
    }

    /**
     * 获取指定privacyCode对应privacyStatus
     * @note
     *   privacyCode: 1：post、2：like、3：wishlist、4：粉丝、5：关注
     *   privacyStatus: 0：允许所有人查看、1：不允许查看
     */
    private fun AccountF.getPrivacyItemStatus(privacyCode: Int): Boolean {
        if (privacyList.isNullOrEmpty()) {
            return true
        }
        privacyList?.forEach {
            if (it.privacyCode == privacyCode) {
                return it.privacyStatus == 0
            }
        }
        return true
    }

    /**
     * 根据指定的三方登录类型，从用户信息中获取对应的三方登录信息
     * @return 获取成功返回对应信息，失败返回null
     * @param 三方类型，10-facebook一键登录, 11-Google一键登录, 12-Apple一键登录
     */
    fun FetchAccountInfoQuery.FetchAccountInfo.getThirdLoginInfo(loginChannel: LoginChannel): FetchAccountInfoQuery.ThirdList? {
        var loginType: Int
        if (loginChannel == LoginChannel.google) {
            loginType = 11
        } else {
            loginType = 10
        }
        UserDataCenter.getAccountInfo()?.thirdList?.forEach {
            if(it.loginType == loginType){
                return it
            }
        }
        return null
    }
}